// 导入axios
import axios from 'axios'
// 使用element-ui message消息提示
import {
  Message
} from 'element-ui'
import {
  getCookies,
  removeCookies
} from './cookies'

// 1.创建新的axios实例
const service = axios.create({
  // baseURL:  process.env.VUE_APP_BASE_API +'/manage',
   baseURL: process.env.NODE_ENV === 'production' ? process.env.VUE_APP_BASE_API : '/api',
  // baseURL: '/api',
  timeout: 150000
})
// 2.请求拦截
service.interceptors.request.use(config => {
  // 发请求前做的一些处理，数据转化，配置请求头，设置token，设置loading等，根据需求添加


    if(config.headers['Content-Type']=='application/json'){
        config.data = JSON.stringify(config.data)
    }
  // config.headers['Content-Type'] = 'application/json'
  // config.headers = {
  //   'Content-Type': 'application/json' //配置请求头
  // }
  // 使用token的时候需要引入cookie方法或者本地localStorage等方法，推荐js-cookie
  const token = getCookies('token') //取token之前，先存token
  if (token) {
    config.headers['Authorization'] = token
    // config.headers = {
    //   'Content-Type': 'application/json', //配置请求头
    //   'Authorization': token //配置请求头
    // }
    //   config.params = {'token': token}  //token携带参数中
    //   config.headers.token = token //token在请求头中
  }
  return config
}, error => {
  Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(response => {
  // 接收响应数据并成功的一些处理
  if (response.data.code === 10004||response.data.code === 10005||response.data.code === 10006||response.data.code === 10008||response.data.code === 10009||response.data.code === 100010 ||response.data.error[0] === 'signature is invalid' ) {
    Message.closeAll()
    removeCookies('token')
    setTimeout(()=>{
      // alert('token已失效， 请重新登录');
      Message.error('token已失效， 请重新登录');
      window.location.href = '/login'
    },1000)
  }
  return response
}, error => {
    console.log(error)
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        error.message = '错误请求'
        break;
      case 401:
        error.message = '未授权，请重新登录'
        break;
      case 403:
        error.message = '拒绝访问'
        break;
      case 404:
        error.message = '请求错误，未找到该资源'
        // window.location.href = '/NotFound'
        break;
      case 405:
        error.message = '请求方法未允许'
        break;
      case 408:
        error.message = '请求超时'
        break;
      case 500:
        error.message = '服务器端出错'
        break;
      case 502:
        error.message = '网络错误'
        break;
      case 503:
        error.message = '服务不可用'
        break;
      case 504:
        error.message = '网络超时'
        break;
      case 505:
        error.message = 'http版本不支持该请求'
        break;
      default:
        error.message = `链接错误${error.response.status}`
    }
  } else {
    // 超时处理
    if (JSON.stringify(error).includes('timeout')) {
      Message.error('服务器响应超时，请刷新当前页')
    }
    error.message = '链接服务器失败'
  }
  Message.error(error.message)
  return Promise.reject(error.response)
})

export default service
